﻿// 4427. 树中节点和.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://www.acwing.com/problem/content/4430/

给定一棵 n
 个节点组成的树。

树中节点编号为 1∼n
。

1
 号节点为树的根节点。

树中的每个节点 v
 都具有一个非负整数权值 av
。

我们用 sv
 来表示从节点 v
 到根节点的路径上经过的所有节点（包括两端节点）的权值之和；用 hv
 来表示从节点 v
 到根节点的路径上经过的所有节点（包括两端节点）的数量。

显然，s1=a1
，h1=1
。

现在，我们只知道树的具体结构以及所有 h
 值为奇数的节点的 s
 值。

请你为树中的每个节点 v
 赋予一个非负整数权值 av
，要求在满足已知信息的情况下，所有节点的权值之和 ∑i=1nai
 尽可能小。

输出 ∑i=1nai
 的最小可能值。

输入格式
第一行包含一个整数 n
。

第二行包含 n−1
 个整数 p2,p3,…,pn
，其中 pi
 表示节点 i
 的父节点编号。

第三行包含 n
 个整数 s1,s2,…,sn
，注意，由于所有 h
 值为偶数的节点的 s
 值都是未知的，所以这些节点的 s
 值并未直接给出，而是用 −1
 来代替。

输出格式
一个整数，表示 ∑i=1nai
 的最小可能值。

如果不存在任何满足已知信息的合理赋值方案，则输出 −1
。

数据范围
前 4
 个测试点满足 2≤n≤5
。
所有测试点满足 2≤n≤105
，1≤pi<i
，−1≤si≤109
。

输入样例1：
5
1 1 1 1
1 -1 -1 -1 -1
输出样例1：
1
输入样例2：
5
1 2 3 1
1 -1 2 -1 -1
输出样例2：
2
输入样例3：
3
1 2
2 -1 1
输出样例3：
-1
*/
#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
}

 